package io.renren.util;

import io.renren.bean.ExamQuestionInfo;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;


public class ExamUtil {

    /**
     * 处理考试题目
     *
     * @param @param  list 题目list
     * @param @param  bean 处理考试题目bean
     * @param @param  examState 1表示未开始，2表示考试中，3表示已交卷
     * @param @return
     * @return ExamQuestionInfo
     * @throws
     * @Description: TODO
     * @author yzw
     * @date 2017年7月31日
     */
    public static ExamQuestionInfo checkExamQuestionInfo(
            List<Map<String, Object>> list, ExamQuestionInfo bean,
            Integer examState) {
        if (list != null && list.size() > 0) {
            List<ExamQuestionInfo.QuestionInfo> questionList = new ArrayList<ExamQuestionInfo.QuestionInfo>();
            for (int i = 0; i < list.size(); i++) {
                ExamQuestionInfo.QuestionInfo questionBean = bean.new QuestionInfo();
                // 序号
                Integer sort = list.get(i).get("sort") == null ? null : Double
                        .valueOf(list.get(i).get("sort").toString()).intValue();
                Integer questionId = list.get(i).get("questionId") == null ? null
                        : Double.valueOf(
                        list.get(i).get("questionId").toString())
                        .intValue(); // 题目id
                Integer state = list.get(i).get("state") == null ? 1 : Double
                        .valueOf(list.get(i).get("state").toString())
                        .intValue(); // 做题状态（1表示未做题，2表示已答题）
                // 学员答案
                String studentAnswer = list.get(i).get("studentAnswer") == null ? null
                        : list.get(i).get("studentAnswer").toString();
                // 正确状态，true（1）表示正确，false（0）表示错误
                Boolean isTrue = list.get(i).get("isTrue") == null ? false
                        : Boolean.valueOf(list.get(i).get("isTrue").toString());
                // 正确答案
                String trueAnswer = list.get(i).get("trueAnswer") == null ? null
                        : list.get(i).get("trueAnswer").toString();
                // 问题内容
                String questionContent = list.get(i).get("questionContent") == null ? ""
                        : list.get(i).get("questionContent").toString();
                // 选项内容
                String optionContent = list.get(i).get("optionContent") == null ? ""
                        : list.get(i).get("optionContent").toString();
                // 选项类型；1表示单选，2表示多选，3表示判断
                Integer optionType = list.get(i).get("optionType") == null ? null
                        : Double.valueOf(
                        list.get(i).get("optionType").toString())
                        .intValue();
                // 1代表普通题目（题目和选项都没有图片）；2代表仅仅题目有图片；3代表仅仅选项有图片；4代表题目有视频
                Integer questionType = list.get(i).get("questionType") == null ? null
                        : Double.valueOf(
                        list.get(i).get("questionType").toString())
                        .intValue();
                // 题目图片地址
                String questionImageUrl = list.get(i).get("questionImageUrl") == null ? null
                        : list.get(i).get("questionImageUrl").toString();
                // 题目视频地址
                String questionVideoUrl = list.get(i).get("questionVideoUrl") == null ? null
                        : list.get(i).get("questionVideoUrl").toString();
                // 1表示收藏，0表示没收藏
                Integer isCollection = list.get(i).get("isCollection") == null ? 0
                        : Double.valueOf(
                        list.get(i).get("isCollection").toString())
                        .intValue();
                // 题目备注
                String remark = list.get(i).get("remark") == null ? "" : list
                        .get(i).get("remark").toString();
                // 当前题号
                questionBean.setSort(sort);
                // 题目id
                questionBean.setQuestionId(questionId);
                // 题目内容
                questionBean.setQuestionContent(questionContent);
                // 选项类型；1表示单选，2表示多选，3表示判断
                questionBean.setOptionType(optionType);
                // 题目类型；1代表普通题目（题目和选项都没有图片）；2代表仅仅题目有图片；3代表仅仅选项有图片；4代表题目有视频
                questionBean.setQuestionType(questionType);
                if (questionType == 2) {
                    // 题目图片地址
                    questionBean.setQuestionImageUrl(questionImageUrl);
                } else {
                    // 题目图片地址
                    questionBean.setQuestionImageUrl(null);
                }
                if (questionType == 4) {
                    // 题目视频地址
                    questionBean.setQuestionVideoUrl(questionVideoUrl);
                } else {
                    // 题目视频地址
                    questionBean.setQuestionVideoUrl(null);
                }
                if (isCollection == 0) {
                    // true表示已收藏，false表示未收藏
                    questionBean.setIsCollection(false);
                } else {
                    // true表示已收藏，false表示未收藏
                    questionBean.setIsCollection(true);
                }

                // 未做题
                if (state == 1) {
                    // true表示已提交当前题目，false表示未提交当前题目
                    questionBean.setIsSubmit(false);
                    // 已做题
                } else {
                    // true表示已提交当前题目，false表示未提交当前题目
                    questionBean.setIsSubmit(true);
                    // 学员答案
                    questionBean.setStudentAnswer(studentAnswer);
                }
                if (examState == 3) {
                    if (isTrue == true) {
                        // 正确状态，true表示正确，false表示错误（只有提交该试卷后才可以查看）
                        questionBean.setIsTrue(true);
                    } else {
                        // 正确状态，true表示正确，false表示错误（只有提交该试卷后才可以查看）
                        questionBean.setIsTrue(false);
                    }
                    // 正确答案（只有提交该试卷后才可以查看）
                    questionBean.setTrueAnswer(trueAnswer);
                    // 备注（可以是对该题目的解释）
                    questionBean.setRemark(remark);
                }
                // ----------------处理选项start
                questionBean.setOptionInfoList(getExamQuestionInfo(
                        questionType, optionContent, questionBean));
                // ----------------处理选项end

                questionList.add(questionBean);
            }
            bean.setQuestionInfoList(questionList);
            return bean;
        }
        return null;
    }

    /**
     * 处理选项
     *
     * @param @param  questionType
     *                1代表普通题目（题目和选项都没有图片）；2代表仅仅题目有图片；3代表仅仅选项有图片；4代表题目有视频
     * @param @param  optionContent 选项内容
     * @param @param  ExamQuestionInfo.QuestionInfo
     * @param @return
     * @return List<ExamQuestionInfo.QuestionInfo.OptionInfo>
     * @throws
     * @Description: TODO
     * @author yzw
     * @date 2017年7月31日
     */
    @SuppressWarnings("unchecked")
    public static List<ExamQuestionInfo.QuestionInfo.OptionInfo> getExamQuestionInfo(
            Integer questionType, String optionContent,
            ExamQuestionInfo.QuestionInfo questionBean) {
        List<ExamQuestionInfo.QuestionInfo.OptionInfo> optionList = new ArrayList<ExamQuestionInfo.QuestionInfo.OptionInfo>();
        if (questionType == 1 || questionType == 2 || questionType == 4) {
            String[] strArr = optionContent.split("@@");
            for (int i = 0; i < strArr.length; i++) {
                ExamQuestionInfo.QuestionInfo.OptionInfo optionBean = questionBean.new OptionInfo();
                // 选项内容
                optionBean.setOptionContent(strArr[i]);
                // 选项字母
                optionBean.setOptionLetter(QuestionUtil.getOptionArr()[i]);
                optionList.add(optionBean);
            }
        } else {
            // optionContent选项内容，optionImageUrl选项图片
            Map<String, Object> map = JsonUtils.json2Obj(optionContent,
                    Map.class);
            if (map != null && map.size() > 0) {
                int i = 0;
                for (Object key : map.keySet()) {
                    Map<String, Object> m = (Map<String, Object>) map.get(key);
                    ExamQuestionInfo.QuestionInfo.OptionInfo optionBean = questionBean.new OptionInfo();
                    // 选项内容
                    optionBean.setOptionContent(m.get("optionContent") == null ? ""
                            : m.get("optionContent").toString());
                    // 图片内容
                    optionBean.setOptionImageUrl(m.get("optionImageUrl") == null ? ""
                            : m.get("optionImageUrl").toString());
                    // 选项字母
                    optionBean.setOptionLetter(QuestionUtil.getOptionArr()[i]);
                    optionList.add(optionBean);
                    System.out.println("选项内容：" + optionBean.getOptionContent());
                    System.out.println("选项字母：" + optionBean.getOptionLetter());
                    i = i + 1;

                }
            }
        }
        return optionList;
    }
}
